#include <iostream>
#include <vector>
using namespace std;

int n,k;
vector<vector<int>> v(12, vector<int>(12, -1));
int dx[8] = {-1,-1,0,1,1,1,0,-1};
int dy[8] = {0,1,1,1,0,-1,-1,-1};
bool visited[12][12];
bool edge[12][12][12][12];
string s;
bool res;
bool canMove(int nx,int ny,int a,int b){
    if(visited[nx][ny]){
        return false;
    }
    if(edge[a][ny][nx][b] || edge[nx][b][a][ny])
        return false;
    return true;
}
void dfs(int a,int b)
{
    if(a == n && b == n &&s.size() == n*n-1)
    {
        res = true;
        return;
    }
    visited[a][b] = true;
    for(int i = 0; i < 8; ++i){
        int nx = a + dx[i];
        int ny = b + dy[i];
        if((v[a][b]+1)%k != v[nx][ny]){
            continue;
        }
        if(!canMove(nx,ny,a,b)) continue;
        edge[a][b][nx][ny] = true;
        s.push_back(i+'0');
        dfs(nx,ny);
        if (res) return;
        edge[a][b][nx][ny] = false;
        visited[nx][ny] = false;
        s.pop_back();
    }
}
// int main()
// {
//     cin >> n >> k;
//     for(int i = 1; i < n + 1; ++i){
//         for(int j = 1; j < n + 1; ++j){
//             cin >> v[i][j];
//         }
//     }
//     dfs(1,1);
//     if(!res) cout << "-1";
//     else{
//         cout << s;
//     }
//     return 0;
// }